Práctica desarrollada por Andres J. Sanchez-Fernandez (sfandres@unex.es) y Juan M. Haut (juanmariohaut@unex.es) para la asignatura Sistemas Multimedia de la Universidad de Extremadura.
Fecha de última modificación: 01/03/2023.
Los objetivos de esta práctica son los siguientes:
En este apartado vamos a trabajar con las siguientes librerías:
Nota: Estas no son las únicas librerías de Python con las que se pueden trabajar para el procesamiento de archivos de audio (otro ejemplo podría ser Librosa). Si alguien está familiarizado con otras librerías puede utilizarlas.
Importamos las librerías/módulos específicos de la siguiente forma.
# Importacion.
from scipy.io import wavfile
import IPython
import os
import numpy as np
import matplotlib.pyplot as plt
# Directorios que usaremos.
cwd = os.getcwd()
audio_input_path = os.path.join(cwd, os.path.join('audio', '_input')) # audio_examples
audio_output_path = os.path.join(cwd, os.path.join('audio', '_output'))
print(f'Path to input audio: {audio_input_path}')
print(f'Path to output audio: {audio_output_path}\n')
Path to input audio: /home/sfandres/Documents/Git/uex-audiopy/audio/_input Path to output audio: /home/sfandres/Documents/Git/uex-audiopy/audio/_output
Información consultada para el desarrollo de esta práctica:
# # Input data.
# filename = os.path.join('audio/input', 'salpique.wav')
# sample_rate_v0, audio_data_v0 = wavfile.read(filename)
# print(f'Shape of the input audio data: {audio_data_v0.shape}\n')
# # Slicing with stride (stereo).
# new_data_v0 = audio_data_v0[1500000//2:1500000*2, :]
# # Writing to a wav file.
# wavfile.write(
# filename=os.path.join('audio', 'salpique_min_stereo.wav'),
# rate=sample_rate_v0,
# data=new_data_v0
# )
# # Loading the new audio data.
# filename = os.path.join('audio', 'salpique_min_stereo.wav')
# sample_rate_v1, audio_data_v1 = wavfile.read(filename)
# print(f'Shape of the input audio data min: {audio_data_v1.shape}')
# print(f'Reduction (%): {int((len(audio_data_v0)-len(audio_data_v1))*100/len(audio_data_v0))}')
# IPython.display.Audio(audio_data_v1.T, rate=sample_rate_v1)
Diferencias entre formatos de archivo para almacenar audio digital.
Cargamos el archivo de audio .wav.
# Cargamos el archivo de audio.
filename = os.path.join(audio_input_path, 'sample1_stereo.wav')
sample_rate, audio_data = wavfile.read(filename)
print(f'Frecuencia de muestreo (sample rate): {sample_rate/1000} kHz')
Frecuencia de muestreo (sample rate): 44.1 kHz
Vamos a escucharlo. Para que esto se haga correctamente, hay que indicarle la frecuencia de muestreo (veremos más adelante qué es).
IPython.display.Audio(audio_data.T, rate=sample_rate) # .T se pasa únicamente si es audio estéreo.